bitkeeper revision 1.1550 (4294732bb-16oL8fVDfFOUaEjoM4oA)
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Wed, 25 May 2005 12:44:27 +0000 (12:44 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Wed, 25 May 2005 12:44:27 +0000 (12:44 +0000)
Fix the 64-bit build.
Signed-off-by: Keir Fraser <keir@xensource.com>
xen/include/asm-x86/div64.h

index 28ed8b296afc137af6b3043179fc97eb230a2f54..b43f1ab486ac1b5c0dbd4d66482104b7c8bb23bb 100644 (file)
@@ -1,6 +1,20 @@
 #ifndef __I386_DIV64
 #define __I386_DIV64
 
+#include <xen/types.h>
+
+#if BITS_PER_LONG == 64
+
+# define do_div(n,base) ({                                     \
+       uint32_t __base = (base);                               \
+       uint32_t __rem;                                         \
+       __rem = ((uint64_t)(n)) % __base;                       \
+       (n) = ((uint64_t)(n)) / __base;                         \
+       __rem;                                                  \
+ })
+
+#else
+
 /*
  * do_div() is NOT a C function. It wants to return
  * two values (the quotient and the remainder), but
        __mod; \
 })
 
-/*
- * (long)X = ((long long)divs) / (long)div
- * (long)rem = ((long long)divs) % (long)div
- *
- * Warning, this will do an exception if X overflows.
- */
-#define div_long_long_rem(a,b,c) div_ll_X_l_rem(a,b,c)
-
-extern inline long
-div_ll_X_l_rem(long long divs, long div, long *rem)
-{
-       long dum2;
-      __asm__("divl %2":"=a"(dum2), "=d"(*rem)
-      :        "rm"(div), "A"(divs));
-
-       return dum2;
+#endif
 
-}
 #endif